package com.resifind.www.dao;

import com.resifind.www.po.*;

import java.sql.Connection;
import java.util.List;

/**
 * @author 36069
 */
public interface ClientDao {

    /**
     * 分页查询所有客户信息
     *
     * @param pageNum  页码
     * @param pageSize 每页显示的记录数
     * @return 客户集合
     */
    List<Client> queryClientByPage(int pageNum, int pageSize);

    /**
     * 查询所有客户数量
     *
     * @return 客户数量
     */
    int queryClientCount();

    /**
     * 根据用户id添加客户
     *
     * @param userId 用户id
     * @param conn   数据库连接
     * @return 是否添加成功
     */
    boolean addClient(int userId, Connection conn);

    /**
     * 根据客户id查询客户
     *
     * @param clientId 客户id
     * @return 客户对象
     */
    Client queryClientByClientId(int clientId);

    /**
     * 根据用户id查询客户
     *
     * @param userId 用户id
     * @return 客户对象
     */
    Client queryClientByUserId(int userId);

    /**
     * 根据客户对象修改实名信息
     * <p>
     * 仅获取客户对象的id，realName，idNum
     * </p>
     *
     * @param client 客户对象
     * @param conn   数据库连接
     * @return 是否修改成功
     */
    boolean updateRealName(Client client, Connection conn);

    /**
     * 根据客户对象修改个人信息
     * <p>
     * 仅获取客户对象的id，nickname，age，signature
     * </p>
     *
     * @param client 客户对象
     * @param conn   数据库连接
     * @return 是否修改成功
     */
    boolean updatePersonalInfo(Client client, Connection conn);

    /**
     * 添加充值申请
     *
     * @param clientId 客户id
     * @param amount   充值金额
     * @param conn     数据库连接
     * @return 是否添加成功
     */
    boolean recharge(int clientId, double amount, Connection conn);

    /**
     * 根据充值表id查询充值表信息
     *
     * @param rechargeId 充值表id
     * @return 充值表对象
     */
    Recharge queryRechargeByRechargeId(int rechargeId);

    /**
     * 修改客户余额
     * <p>
     * 原金额+amount
     * 可提供负值
     * </p>
     *
     * @param clientId 客户id
     * @param amount   金额
     * @param conn     数据库连接
     * @return 是否修改成功
     */
    boolean updateBalance(int clientId, double amount, Connection conn);

    /**
     * 修改客户积分
     * <p>
     * 原积分+bonusCoin
     * 可提供负值
     * </p>
     *
     * @param clientId  客户id
     * @param bonusCoin 积分奖励
     * @param conn      数据库连接
     * @return 是否修改成功
     */
    boolean updateCoin(int clientId, int bonusCoin, Connection conn);

    /**
     * 修改头像
     * <p>
     * fileName为头像文件名，不包含路径
     * </p>
     *
     * @param clientId 客户id
     * @param fileName 文件名
     * @param conn     数据库连接
     * @return 是否修改成功
     */
    boolean updateAvatar(int clientId, String fileName, Connection conn);

    /**
     * 查询所有客户信息
     *
     * @return 客户集合
     */
    List<Client> queryAllClients();

    /**
     * 修改客户状态
     *
     * @param clientId 客户id
     * @param status   状态
     * @param conn     数据库连接
     * @return 是否修改成功
     */
    boolean updateStatus(int clientId, String status, Connection conn);
}
